令人惊讶的是,没有明确的文档__weakref__。弱引用在这里解释。__weakref__的文档中也简短提及__slots__。但是我找不到任何关于__weakref__自己的东西。
__weakref__
__slots__
到底是__weakref__什么?-它只是充当标志的成员:如果存在,则该对象可能被弱引用?-还是可以重写/分配以获得所需行为的函数/变量?怎么样?
__weakref__只是一个不透明的对象,它引用了当前对象的所有弱引用。实际上,它是weakref(或有时是weakproxy)的实例,它既是对该对象的弱引用,又是对该对象的所有弱引用的双向链接列表的一部分。
weakref
weakproxy
这只是一个实现细节,它使垃圾收集器可以通知弱引用其引用对象已被收集,并且不再允许访问其基础指针。
弱引用不能依赖于检查它所引用对象的引用计数。这是因为该内存可能已被回收,并且正在被另一个对象使用。最好的情况是VM崩溃,最坏的情况是弱引用将允许访问其最初未引用的对象。这就是为什么垃圾收集器必须通知弱引用其引用不再有效的原因。
有关该对象的结构,请参见weakrefobject.h,有关此对象,请参见C- API。实现细节在这里